#ifndef _CHANNEL_HPP_
#define _CHANNEL_HPP_


#endif

#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

class Channel
{
public:
    Channel(int wfd, pid_t who)
        : _wfd(wfd), _who(who)
    {
        // Channel-3-1234  3号文件描述符(写端)对应1234进程
        _name = "Channel-" + to_string(wfd) + "-" + to_string(who);
    }

    string Name()
    {
        return _name; // 方便获取对应的写端文件描述符
    }

    string Name() const
    {
        return _name;
    }

    void Close()
    {
        // 只需要关闭对应的写端
        ::close(_wfd);
    }

    // 发送任务
    void Send(int cmd)
    {
        // 其实也就是向对应的管道中写数据 向_wfd写
        ::write(_wfd, &cmd, sizeof(cmd));
    }

    pid_t Id()
    {
        return _who;
    }

    int _wFd()
    {
        return _wfd;
    }

    ~Channel()
    {
    }

private:
    int _wfd;     // 相当于写端文件描述符
    string _name; // 每个文件描述符的名字 方便管理
    pid_t _who;   // 得知每个写端对应那个子进程
};
